<!--Copyright (C) 1988-2005 by the Institute of Global Environment and Society (IGES). See file COPYRIGHT for more information.-->

<h2><b>tloop</b></h2><p> 

<code>tloop(<i>expr</i>)</code><p>

When time is a varying dimension in the dimension environment, the
<code>tloop</code> function evaluates the <code><i>expr</i></code> at
fixed times, then reconstructs the time series to obtain a final result
that is time varying. The <code>tloop</code> function is required due to
the implementation of the GrADS expression evaluation rules, and the
implementation of certain other functions. The <code>tloop</code> function
can also improve performance for certain calculations. <p>

The <code>tloop</code> function is provided as a way to obtain time series
from functions that themselves are not implemented to be able to operate
when time is a varying dimension. See the examples below. <p>

<h3>Usage Notes </h3><p>

<ol>
<li>The <code>tloop</code> function loops through time based on the time
increment of the default file; it is thus important to have the default
file set appropriately. <p>

<li>The <code>tloop</code> function and the <a
href="gradcomddefine.html"><code>define</code></a> command
work very similarly. In many cases, the <code>define</code> command can be
used to obtain the same result as using <code>tloop</code>. In fact, the
<code>define</code> command can be even more useful along
those lines, since it also loops through the Z dimension, in effect
creating a <code>zloop</code> function. See the define command for more
information. <p>
</ol>

<h3>Examples</h3><p> 

<ol>
<li>A typical application of the <code>tloop</code> function is to obtain
a time series of areal averages using the <a
href="gradfuncaave.html"><code>aave</code></a> function.
Since the <code>aave</code> function will not work when time is a varying
dimension, the useof <code>tloop</code> is required:<p> 

<dd><code>set x 1 
<dd>set y 1 
<dd>set t 1 31 
<dd>d tloop(aave(ts,lon=0,lon=360,lat=-90,lat=90)) </code><p>

Note that the dimension environment is set up to reflect the kind of plot
desired, namely a <code>line</code> plot where time is the varying
dimension. Thus it is necessary to fix the X and Y dimensions; the values
of those dimensions in this case are not relevent.<p> 

<li>The <code>tloop</code> function can be used to smooth in time: <p>

<dd><code>set lon -180 0 
<dd>set lat 40 
<dd>set lev 500 
<dd>set t 3 28 
<dd>d tloop(ave(z,t-2,t+2)) </code><p>

In this example, we are plotting a time-longitude cross section, where
each time is a 5 time period mean centered at that time. <p>

<li>If we wanted to display a time-longitude cross section (X and T
varying), with the data being averaged over latitude, the 'standard' way
to do this might be: <p>

<dd><code>set lon -180 0 
<dd>set lat 40 
<dd>set lev 500 
<dd>set t 1 31 
<dd>d ave(z,lat=20,lat=40) </code><p>

This calculation could be fairly time consuming, since to perform the
average, a longitude-time section is obtained at each latitude. If the
time period is long, then this would be a very inneficient operation, due
to the ordering of data in a typical GrADS data set. The
<code>tloop</code> function might substantially improve the performance of
this calculation: <p>

<dd><code>d tloop(ave(z,lat=20,lat=40)) </code><p>
since the average is then done at each fixed time, and is thus just an
average of X varying data over Y. Thus the <code>tloop</code> function
here is simply being used to force a different ordering to the
calculation, although the result is the same.
</ol>
